package com.aiwiown.snackmq.cluster.routing;

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;

import java.io.Serializable;

/**
 * Binding 类用于定义交换机和队列之间的绑定关系
 * 在 SnackMQ 中，通过绑定键（routingKey）来确定消息的流向
 * 从交换机到队列的消息路由依赖于这三个元素：交换机名、队列名和路由键
 */
@Getter
@AllArgsConstructor
@ToString
@EqualsAndHashCode // 用于在集合中正确地添加和删除
public class Binding implements Serializable {

    private static final long serialVersionUID = 357470752013062130L;
    /**
     * 交换机名，消息首先发送到的交换机
     */
    private final String exchangeName;
    /**
     * 队列名，在 SnackMQ 中，队列名就是 Topic 名
     * 消息最终被投递到的队列
     */
    private final String queueName;
    /**
     * 路由键，用于交换机确定消息流向的键
     * 消息中的路由键必须与绑定中的路由键匹配，消息才会被投递到队列
     */
    private final String routingKey;
}
